06. Course Hold

Course Attitude Hold

The course-attitude hold controller is shown in the upper left.

The course-attitude hold controller is shown in the upper left.

The course attitude hold controller is a PI controller which uses the commanded heading angle \chi_c to command a roll angle \phi_c.

\begin{aligned} E_{\chi_t} &= \chi^c_t - \chi_t\\ I_{\chi_t} &= I_{\chi_{t-1}} + E_{\chi_t}\Delta t\\ \phi^c &= k_{p_\chi}E_{\chi_t} + k_{i_\chi}I_{\chi_t} \end{aligned}

The Need for an Integrator

The integrator term is important here. Its job is to correct for modeling errors, which are much more likely to show up here than in the inner loop. The flight path angle is a much more complex nonlinear function of the state of the vehicle, which we are linearizing around.

There's a potential problem lurking here. We need the course hold controller to know about the limits on the roll attitude: we don't want to bank so far over that we can't compensate for gravity with our lift vector.

If the changes in commanded flight path angles are too aggressive, then either the course hold controller will ask for too large of a roll change or it will need to saturate at some maximum roll \phi_{\text{max}}^c. In either case, there may be significant error in the flight path angle and this error will build up in the integrator.

This buildup is known as integrator "windup" and we'll discuss it more later in this lesson.

What about a D term?

We don't need a derivative term. Remember, the role of the derivative term is to damp the response of the system, but in a cascaded system we want to run the outer loop much more slowly than the inner loop.

The reason for this is that each control loop has finite response time, and the outer loop has to give the inner loop time to respond to the last command before sending the next one. If we run the outer loop too slowly, the system will not be responsive enough. If we run the outer loop too quickly the system is likely to be unstable, as the inner loop will constantly be chasing what the outer loop tells it to do.

Since the outer loop is running much more slowly than the inner loop, it shouldn't need any damping.